#include "StdAfx.h"
#include "FactoryElementos.h"
#include "FactoryPelotas.h"
#include "SapoFactory.h"
#include "FactoryCarril.h"
#include "FactoryFuente.h"
#include "SumideroFactory.h"
#include "Utilidades.h"
#include "DispersorFactory.h"
#include "Pelota.h"
#include "Elemento.h"

FactoryElementos::FactoryElementos(void)
{
}

vector<Elemento*> FactoryElementos::getListaElementos(vector<NodoXML> listaNodosElemento, Escenario* escenario)
{
	vector<Elemento*> listaElementos;
	vector<Pelota*> listaPelotas;
	vector<Elemento*>::iterator itAux;
	Carril* carrilcito;
	Escenario* esc = escenario;
	vector<NodoXML>::iterator itElementos;
	
	string buscar;
	bool encontrado = false;
	
	for(itElementos=listaNodosElemento.begin(); itElementos<listaNodosElemento.end(); itElementos++)
	{
		
		NodoXML nodoElemento=*itElementos;
		buscar = itElementos->nombre;
		for (itAux = listaElementos.begin(); itAux < listaElementos.end(); itAux++)
		{
			if ((*itAux)->GetId() == itElementos->getAttribute("id"))
			{
				encontrado = true;
			}

		}

		if ( encontrado == false)
		{
			if (Utilidades::sonStringsIguales(buscar ,"Sapo")){
				Sapo* sapito=SapoFactory::getSapoInstance(&nodoElemento ,escenario);
				listaElementos.push_back(sapito);
				escenario->setSapo(sapito);
			}else if (Utilidades::sonStringsIguales(buscar,"Sumidero")){
				Sumidero* sumiderito=SumideroFactory::getSumideroInstance(&nodoElemento,escenario);
				listaElementos.push_back(sumiderito);
				escenario->addSumidero(sumiderito);
			}else if (Utilidades::sonStringsIguales(buscar,"Fuente")){
				listaElementos.push_back(FuenteFactory::getFuenteInstance(&nodoElemento,escenario));
			}else if (Utilidades::sonStringsIguales(buscar,"Carril")){
				carrilcito=FactoryCarril::getCarrilInstance(&nodoElemento,escenario);
				listaElementos.push_back(carrilcito);
				escenario->setCarril(carrilcito);
			}else if (Utilidades::sonStringsIguales(buscar,"Dispersor")){
				Dispersor* dispersorcito=DispersorFactory::getDispersorInstance(&nodoElemento,escenario);
				escenario->addDispersor(dispersorcito);
				listaElementos.push_back(dispersorcito);
			}else if (Utilidades::sonStringsIguales(buscar,"Pelota")){
				listaPelotas.push_back(FactoryPelotas::getPelotaInstance(&nodoElemento,escenario));
			}else{
				encontrado = false;
				Log4Cpp::error("Id duplicado entre Elementos revisar XML.\n","FactoryElementos");
			}
		}
	}
	esc->setPelotasDisponibles(listaPelotas);
	carrilcito->setPelotasDisponibles(listaPelotas);


	/*
	//construyo los 5 bonus distintos

	

	//Bonus de Vida
	Textura* texturaVida=esc->GetTextura("T11");
	
	Bonus* bonusVida=new Bonus(texturaVida);
	bonusVida->setPosX(0);
	bonusVida->setPosY(0);
	bonusVida->setTipoBonus("vida");
	esc->setBonusVida(bonusVida);
	bonusVida->setRadio(2);

	//Bonus de Puntos
	Textura* texturaPuntos=esc->GetTextura("T12");
	
	Bonus* bonusPuntos=new Bonus(texturaPuntos);
	bonusPuntos->setPosX(0);
	bonusPuntos->setPosY(0);
	bonusPuntos->setTipoBonus("puntos");
	bonusPuntos->setRadio(2);
	esc->setBonusPuntos(bonusPuntos);

	
	//Bonus de Retroceso
	Textura* texturaRetroceso=esc->GetTextura("T13");
	Bonus* bonusRetroceso=new Bonus(texturaRetroceso);
	bonusRetroceso->setPosX(0);
	bonusRetroceso->setPosY(0);
	bonusRetroceso->setTipoBonus("retroceso");
	bonusRetroceso->setRadio(2);
	esc->setBonusRetroceso(bonusRetroceso);

	//Bonus de Precision
	Textura* texturaPrecision=esc->GetTextura("T14");
	Bonus* bonusPrecision=new Bonus(texturaPrecision);
	bonusPrecision->setPosX(0);
	bonusPrecision->setPosY(0);
	bonusPrecision->setTipoBonus("precision");
	bonusPrecision->setRadio(2);
	esc->setBonusPrecision(bonusPrecision);

	//Bonus de Freno
	Textura* texturaFreno=esc->GetTextura("T15");
	Bonus* bonusFreno=new Bonus(texturaFreno);
	bonusFreno->setPosX(0);
	bonusFreno->setPosY(0);
	bonusFreno->setTipoBonus("freno");
	bonusFreno->setRadio(2);
	esc->setBonusFreno(bonusFreno);
*/
		
	return listaElementos;
}

